前面介紹了幾天,用 DuckDB 可以輕易辦到,但是在 Postgres 確很難辦的到事情,在 Postgres 中往往需要另外寫 PL/pgSQL
來擴充 Postgres 的功能。 那在 DuckDB 有沒有類似的 Stored Procedure 呢?
恭喜問了就有
Stored Procedure 在 DuckDB 中用 Macro 稱呼,思思有兩種 Macro 也有兩種。
今天我們就先介紹 Scalar Macro
CREATE MACRO T1(lol) AS
lol || 'T1 Fighting!';
SELECT T1(' 2024 World ');
我們定義了一個 macro T1
,然後可以在 SQL 中輕鬆的使用,你可能會想,這跟 Postgres 有什麼區別?
我覺得最重要的區別就是簡單, DuckDB 的 Macro 更像是同一種 SQL 寫 function 而非 PL/pgSQL
用了很多額外的關鍵字。
那 DuckDB 怎麼讓 Macro 有足夠的表達力 ?
CREATE MACRO plus_one(a) AS
(WITH cte AS (SELECT 1 AS a) SELECT cte.a + a FROM cte);
CREATE MACRO add_default(a, b := 5) AS a + b;
注意那個 :=
CREATE MACRO ifelse(a, b, c) AS
CASE WHEN a THEN b ELSE c END;
明天再介紹 Table macro 拉 !